package com.atguigu06.polymorphism;

/**
 * ClassName: PersonTest1
 * Package: com.atguigu06.polymorphism
 * Description:
 *
 * @Author 姜
 * @Create 2023/11/22 14:35
 * @Version 1.0
 */
public class PersonTest1 {
    public static void main(String[] args) {
        Person p1 = new Man();

        // 向下转型: 使用强转符
        Man m1 = (Man) p1;
        m1.earnMoney();
        System.out.println(m1.isSmoking);
        System.out.println(p1 == m1);
        /*
         * 向下转型可能会出现：类型转换异常（ClassCastException）
         *
         * */
        Person p2 = new Woman();
//        Man m2 = (Man) p2;
//        m2.earnMoney();
        /*
         * 1. 建议在向下转型之前，使用instanceof进行判断，避免出现类型转换异常
         * 2. 格式 a instanceof a : 判断对象a是否是类A的实例
         * 3. 如果a instanceof A 返回true，则：
         *  a instanceof superA 返回也是true。其中，A 时superA的子类。
         * */
        if (p2 instanceof Man) {
            Man m2 = (Man) p2;
            m2.earnMoney();
        }
        if (p2 instanceof Woman) {
            System.out.println("Woman");
        }
        if (p2 instanceof Person) {
            System.out.println("Person");
        }
        if (p2 instanceof Object) {
            System.out.println("Object");
        }
    }
}
